
const 图片转base64 = async (imagePath) => {
  const fs = require("fs");

const sharp = require("sharp");

const { createCanvas, loadImage } = require('canvas');

  try {
    // 读取文件
    const imageBuffer = fs.readFileSync(imagePath);

    // 使用 sharp 获取图像元数据
    const metadata = await sharp(imageBuffer).metadata();

    // 检查是否有 ICC 配置文件
    let iccBuffer = null;
    if (metadata.icc) {
      iccBuffer = metadata.icc;
    }

    // 检查图像是否为渐进式
    const isProgressive = metadata.isProgressive;
    console.log('原始图像是否为渐进式:', isProgressive);

    // 加载图片
    const image = await loadImage(imageBuffer);

    // 创建 Canvas
    const canvas = createCanvas(372, 828);
    const ctx = canvas.getContext('2d');

    // 将图片绘制到 Canvas 上
    ctx.drawImage(image, 0, 0, 372, 828);

    // 随机选择一个位置并绘制一个点
    const randomX = Math.floor(Math.random() * 372);
    const randomY = Math.floor(Math.random() * 828);
    ctx.beginPath();
    ctx.arc(randomX, randomY, 1, 0, 2 * Math.PI); // 画一个半径为 5 的圆
    ctx.fillStyle = 'red'; // 点的颜色
    ctx.fill();

    // 将 Canvas 内容转换为 JPEG 数据 URL
    let dataURL;

    // 使用 sharp 处理图像并设置为渐进式
    const processedBuffer = await sharp(canvas.toBuffer())
      .withMetadata({ icc: iccBuffer })
      .jpeg({ progressive: false }) // 设置为渐进式
      .toBuffer();

    // 将处理后的图像转换为数据 URL
    dataURL = `data:image/jpeg;base64,${processedBuffer.toString('base64')}`;

    return dataURL;
  } catch (error) {
    console.error('加载图片失败:', error);
    throw error; // 重新抛出错误以便调用者处理
  }
};


module.exports = 图片转base64;
